#include "uiconfirmdialog.h"
#include <QPushButton>
#include <QLayout>
/**
 * @brief 构造函数：创建一个确认对话框
 * @param parent 父QWidget
 * 初始化对话框，包括创建取消和确认按钮，并设置它们的点击信号。
 */
UiConfirmDialog::UiConfirmDialog(QWidget *parent):QDialog(parent)
{
    m_cancelBtn = new QPushButton("取消",this); // 创建取消按钮
    connect(m_cancelBtn,&QPushButton::clicked,this,&UiConfirmDialog::sigCancel); // 连接取消按钮的点击信号至sigCancel

    m_confirmBtn = new QPushButton("确认",this); // 创建确认按钮
    connect(m_confirmBtn,&QPushButton::clicked,this,&UiConfirmDialog::sigConfirm); // 连接确认按钮的点击信号至sigConfirm

    m_btnLayout = new QHBoxLayout; // 创建按钮布局
    m_btnLayout->addStretch(0); // 为按钮布局添加拉伸
    m_btnLayout->addWidget(m_cancelBtn); // 将取消按钮添加至按钮布局
    m_btnLayout->addWidget(m_confirmBtn); // 将确认按钮添加至按钮布局

    m_mainLayout = new QVBoxLayout(this); // 创建主布局
    m_mainLayout->addLayout(m_btnLayout); // 将按钮布局添加至主布局
}

/**
 * @brief 添加一个QWidget到对话框的主布局
 * @param widget 要添加的QWidget指针
 * @return 添加成功返回true，如果widget为nullptr返回false
 */
bool UiConfirmDialog::addWidget(QWidget *widget)
{
    if(!widget)
        return false; // 如果widget为nullptr，则返回false

    auto insertPos = m_mainLayout->indexOf(m_btnLayout); // 获取在主布局中插入的位置
    m_mainLayout->insertWidget(insertPos,widget); // 将widget插入到主布局指定位置

    return true; // 返回true表示添加成功
}

/**
 * @brief 添加一个QLayout到对话框的主布局
 * @param layout 要添加的QLayout指针
 * @return 添加成功返回true，如果layout为nullptr返回false
 */
bool UiConfirmDialog::addLayout(QLayout *layout)
{
    if(!layout)
        return false; // 如果layout为nullptr，则返回false

    auto insertPos = m_mainLayout->indexOf(m_btnLayout); // 获取在主布局中插入的位置
    m_mainLayout->insertLayout(insertPos,layout); // 将layout插入到主布局指定位置

    return true; // 返回true表示添加成功
}

/**
 * @brief 处理对话框关闭事件
 * @param event 关闭事件对象
 * 当对话框尝试关闭时，发出sigCancel信号，然后调用QDialog的closeEvent方法。
 */
void UiConfirmDialog::closeEvent(QCloseEvent *event)
{
    emit sigCancel(); // 发出sigCancel信号
    QDialog::closeEvent(event); // 调用基类的closeEvent方法
}